#include<iostream>
//要求C++11特性，只要核心内存管理那就是RAII。

template<class T>
class Unique_Ptr{
    public:
    //构造函数
    Unique_Ptr(T* ptr):_ptr(ptr){};
    Unique_Ptr():_ptr(nullptr){};
    //析构函数
    ~Unique_Ptr(){
        delete _ptr;
    }
    //因为是uniqueptr所以要保证这块空间只能一个指针指向
    //去除拷贝构造和赋值拷贝
    Unique_Ptr(const Unique_Ptr&) = delete;
    Unique_Ptr& operator=(const Unique_Ptr&) = delete;
    //但是可以移动拷贝和移动构造：资源使用权转换
    Unique_Ptr(const Unique_Ptr&& other):_ptr(other._ptr){
        other._ptr = nullptr;
    }
    Unique_Ptr& operator=(Unique_Ptr&& other){
        if(this != &other){
            //和拷贝不一样
            delete _ptr;
            _ptr = other._ptr;
            other._ptr = nullptr;
        }
        return *this;
    }
    private:
    //需要一个类型指针
    T* _ptr;
};